/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package facade;

import entities.Proposition;
import entities.question.AbstractQuestion;
import entities.questionnaire.Questionnaire;
import entities.reponse.AbstractReponse;
import entities.reponse.ReponseChoix;
import entities.reponse.ReponseLibre;
import entities.utilisateur.AbstractRepondant;
import java.util.List;
import javax.ejb.Local;

/**
 * Interface definissant les methodes necessaire pour passer un questionnaire.
 * Celles-ci incluent la recuperation du questionnaire, de l utilisateur, et le traitement des reponses
 * @author aurelien.emery
 */
@Local
public interface QuestionnaireFacadeLocal {
    /**
     * enregistre la reponse, et renvoie l objet {@link Reponse} correspondant.
     * Celui-ci dispose alors d un id, qui permet de modifier la reponse et non ajouter une nouvelle reponse
     * si le parametre reponse n est pas null, les parametres questionnaire et question ne sont pas pris en compte dans le traitement
     * @param reponse la reponse si elle existe ou null pour la creer
     * @param valeur nouvelle valeur de la reponse
     * @param questionnaire
     * @param question
     * @return
     */
    public AbstractReponse addReponseLibre(ReponseLibre reponse,String valeur, Questionnaire questionnaire,AbstractQuestion question);

    /**
     * enregistre la ou les  {@link Proposition}(s), et renvoie l objet {@link Reponse} correspondant.
     * Celui-ci dispose alors d un id, qui permet de modifier la reponse et non ajouter une nouvelle reponse
     * si le parametre reponse n est pas null, les parametres questionnaire et question ne sont pas pris en compte dans le traitement
     * @param reponse
     * @param valeur
     * @param questionnaire
     * @param question
     */
    public AbstractReponse addReponseChoix(ReponseChoix reponse,List<Proposition> valeur, Questionnaire questionnaire,AbstractQuestion question);

    /**
     * Renvoit le questionnaire associé a l utilisateur, le questionnaire, et la chaine de controle.
     * Le questionnaire est detaché du contexte de persistence, et n a dans sa liste de cible
     * que l utilisateur dont l id est passé en parametre
     * @param user identifiant de l utilisateur. cette valeur doit pouvoir etre converti en Long
     * @param quest identifiant du questionnaire. cette valeur doit pouvoir etre converti en Long
     * @param ctrl chaine de controle associé a l utilisateur et au questionnaire.
     * @return le questionnaire ou null si l utilisateur n existe pas,
     * le questionnaire n existe pas, le controle ne correspond pas,
     * un des parametres est null ou l utilisateur n est pas dans la liste du questionnaire.
     */
    public Questionnaire findQuestionnaire(String user,String quest,String ctrl);

    /**
     * Cette methode permet d envoyer un mail de remerciement au repondant.
     * Cette methode ne fait rien si le mail n est pas renseigné, si le repondant est null ou si le repondant est anonyme.
     * @param repondant
     */
    public void envoiMail(AbstractRepondant repondant,Questionnaire questionnaire);

    /**
     * Renvoie le repondant correspondant au login passé en parametre
     * @param login
     * @return le repondant souhaité, ou null
     */
    public AbstractRepondant findRepondant(String login);
    
}
